////////////////////////////////////////////////////////////////
// filename: world.cpp
// description: source file for the world objects class
// author: Jay Tomten (jaytomten@gmail.com)
// notes:

// namespace

// defines

// includes
#if defined(__APPLE__)
#include <SDL_image/SDL_image.h>
#else
#include <SDL/SDL_image.h>
#endif
#include <SDL/SDL.h>
#include "object.h"
#include <stdlib.h>
#include <math.h>
#include "province.h"
#include <iostream>

// globals

////////////////////////////////////////////////////////////////
// constructor
Province::Province() {

    // use Init() or alt constructor

}

////////////////////////////////////////////////////////////////
// alternate constructor that calls Init()
Province::Province(int type, float x, float y, float z) {

    Init(type, x, y, z);

}

////////////////////////////////////////////////////////////////
// destructor
Province::~Province() {

    glDeleteTextures(1, &texture);
    delete v;

}

////////////////////////////////////////////////////////////////
// Init() - set up the world we want
void Province::Init(int type, float x, float y, float z) {

    switch(t) {
    case PROVINCE_1:
        size = 19;
        v[0].Init( 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); // box
        v[1].Init( 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
        v[2].Init( 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
        v[3].Init( 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f);
        v[4].Init( 0.6, 0.0f, 0.0f, 0.6, 0.4, 0.0f); // door
        v[5].Init( 0.6, 0.4, 0.0f, 0.9, 0.4, 0.0f);
        v[6].Init( 0.9, 0.4, 0.0f, 0.9, 0.0f, 0.0f);
        v[7].Init( 0.2, 0.7, 0.0f, 0.4, 0.7, 0.0f); // window 1
        v[8].Init( 0.4, 0.7, 0.0f, 0.4, 0.8, 0.0f);
        v[9].Init( 0.4, 0.8, 0.0f, 0.2, 0.8, 0.0f);
        v[10].Init( 0.2, 0.8, 0.0f, 0.2, 0.7, 0.0f);
        v[11].Init( 0.6, 0.7, 0.0f, 0.8, 0.7, 0.0f); // window 2
        v[12].Init( 0.8, 0.7, 0.0f, 0.8, 0.8, 0.0f);
        v[13].Init( 0.8, 0.8, 0.0f, 0.6, 0.8, 0.0f);
        v[14].Init( 0.6, 0.8, 0.0f, 0.6, 0.7, 0.0f);
        v[15].Init( 0.7, 1.0f, 0.0f, 0.7, 2.0f, 0.0f); // flag
        v[16].Init( 0.7, 2.0f, 0.0f, 0.3, 2.0f, 0.0f);
        v[17].Init( 0.3, 2.0f, 0.0f, 0.3, 1.6, 0.0f);
        v[18].Init( 0.3, 1.6, 0.0f, 0.7, 1.6, 0.0f);
        width = 2.0;
        col.Init(1.0f, 1.0f, 1.0f, 1.0f);
        t = PROVINCE_1;
        state = STATE_NORM;
        power = 0.0;
        range = 0.0;
        life = 0.0;
        pos.Init(x, y, z);
	    break;
    case PROVINCE_2:
        size = 21;
        v[0].Init( 0.0f, 0.0f, 0.0f, 1.5, 0.0f, 0.0f); // box
        v[1].Init( 1.5, 0.0f, 0.0f, 1.5, 1.0f, 0.0f);
        v[2].Init( 1.5, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
        v[3].Init( 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f);
        v[4].Init( 0.2, 0.0f, 0.0f, 0.2, 0.4, 0.0f); // door
        v[5].Init( 0.2, 0.4, 0.0f, 0.5, 0.4, 0.0f);
        v[6].Init( 0.5, 0.4, 0.0f, 0.5, 0.0f, 0.0f);
        v[7].Init( 0.2, 0.7, 0.0f, 0.4, 0.7, 0.0f); // window 1
        v[8].Init( 0.4, 0.7, 0.0f, 0.4, 0.8, 0.0f);
        v[9].Init( 0.4, 0.8, 0.0f, 0.2, 0.8, 0.0f);
        v[10].Init( 0.2, 0.8, 0.0f, 0.2, 0.7, 0.0f);
        v[11].Init( 0.8, 0.0f, 0.0f, 0.8, 0.8, 0.0f); // garage door
        v[12].Init( 0.8, 0.8, 0.0f, 1.3, 0.8, 0.0f);
        v[13].Init( 1.3, 0.8, 0.0f, 1.3, 0.0f, 0.0f);
        v[14].Init( 0.8, 0.4, 0.0f, 1.3, 0.4, 0.0f);
        v[15].Init( 0.8, 0.2, 0.0f, 1.3, 0.2, 0.0f);
        v[16].Init( 0.8, 0.6, 0.0f, 1.3, 0.6, 0.0f);
        v[17].Init( 0.9, 1.0f, 0.0f, 0.9, 2.0f, 0.0f); // flag
        v[18].Init( 0.9, 2.0f, 0.0f, 0.5, 2.0f, 0.0f);
        v[19].Init( 0.5, 2.0f, 0.0f, 0.5, 1.6, 0.0f);
        v[20].Init( 0.5, 1.6, 0.0f, 0.9, 1.6, 0.0f);
        width = 2.0;
        col.Init(1.0f, 1.0f, 1.0f, 1.0f);
        t = PROVINCE_2;
        state = STATE_NORM;
        power = 0.0;
        range = 0.0;
        life = 0.0;
        team = TEAM_NEUTRAL;
        pos.Init(x, y, z);
	    break;

    default:
        break;
    }

}

////////////////////////////////////////////////////////////////
// Update() - update one world item
bool Province::Update(float d) {

    // better find something to do quick
    return true;

}

////////////////////////////////////////////////////////////////
// Draw() - draw one world item
void Province::Draw() {

    // nothing to do yet

}









